home *** CD-ROM | disk | FTP | other *** search
- \clearextrapart{Introduction}
-
- \label{historysection}
-
- Programming languages should be designed not by piling feature on top of
- feature, but by removing the weaknesses and restrictions that make additional
- features appear necessary. Scheme demonstrates that a very small number
- of rules for forming expressions, with no restrictions on how they are
- composed, suffice to form a practical and efficient programming language
- that is flexible enough to support most of the major programming
- paradigms in use today.
-
- %Scheme has influenced the evolution of Lisp.
- Scheme
- was one of the first programming languages to incorporate first class
- procedures as in the lambda calculus, thereby proving the usefulness of
- static scope rules and block structure in a dynamically typed language.
- Scheme was the first major dialect of Lisp to distinguish procedures
- from lambda expressions and symbols, to use a single lexical
- environment for all variables, and to evaluate the operator position
- of a procedure call in the same way as an operand position. By relying
- entirely on procedure calls to express iteration, Scheme emphasized the
- fact that tail-recursive procedure calls are essentially goto's that
- pass arguments. Scheme was the first widely used programming language to
- embrace first class escape procedures, from which all known
- sequential control structures can be synthesized. More recently, building
- upon the design of generic arithmetic in Common Lisp, Scheme introduced
- the concept of exact and inexact numbers.
- % A few
- %of these innovations have recently been incorporated into Common Lisp, while
- %others remain to be adopted.
-
- \todo{Ramsdell:
- I would like to make a few comments on presentation. The most
- important comment is about section organization. Newspaper writers
- spend most of their time writing the first three paragraphs of any
- article. This part of the article is often the only part read by
- readers, and is important in enticing readers to continue. In the
- same way, The first page is most likely to be the only page read by
- many SIGPLAN readers. If I had my choice of what I would ask them to
- read, it would be the material in section 1.1, the Semantics section
- that notes that scheme is lexically scoped, tail recursive, weakly
- typed, ... etc. I would expand on the discussion on continutations,
- as they represent one important difference between Scheme and other
- languages. The introduction, with its history of scheme, its history
- of scheme reports and meetings, and acknowledgements giving names of
- people that the reader will not likely know, is not that one page I
- would like all to read. I suggest moving the history to the back of
- the report, and use the first couple of pages to convince the reader
- that the language documented in this report is worth studying.
- }
-
- \subsection*{Background}
-
- \vest The first description of Scheme was written in
- 1975~\cite{Scheme75}. A revised report~\cite{Scheme78}
- \todo{italicize or not?} appeared in 1978, which described the evolution
- of the language as its MIT implementation was upgraded to support an
- innovative compiler~\cite{Rabbit}. Three distinct projects began in
- 1981 and 1982 to use variants of Scheme for courses at MIT, Yale, and
- Indiana University~\cite{Rees82,MITScheme,Scheme311}. An introductory
- computer science textbook using Scheme was published in
- 1984~\cite{SICP}.
-
- %\vest As might be expected of a language used primarily for education and
- %research, Scheme has always evolved rapidly. This was no problem when
- %Scheme was used only within MIT, but
- \vest As Scheme became more widespread,
- local dialects began to diverge until students and researchers
- occasionally found it difficult to understand code written at other
- sites.
- Fifteen representatives of the major implementations of Scheme therefore
- met in October 1984 to work toward a better and more widely accepted
- standard for Scheme.
- %Participating in this workshop were Hal Abelson, Norman Adams, David
- %Bartley, Gary Brooks, William Clinger, Daniel Friedman, Robert Halstead,
- %Chris Hanson, Christopher Haynes, Eugene Kohlbecker, Don Oxley, Jonathan Rees,
- %Guillermo Rozas, Gerald Jay Sussman, and Mitchell Wand. Kent Pitman
- %made valuable contributions to the agenda for the workshop but was
- %unable to attend the sessions.
- %
- %Subsequent electronic mail discussions and committee work completed the
- %definition of the language.
- %Gerry Sussman drafted the section on numbers, Chris Hanson drafted the
- %sections on characters and strings, and Gary Brooks and William Clinger
- %drafted the sections on input and output.
- %William Clinger recorded the decisions of the workshop and
- %compiled the pieces into a coherent document.
- %The ``Revised revised report on Scheme''~\cite{RRRS}
- Their report~\cite{RRRS}
- was published at MIT and Indiana University in the summer of 1985.
- Another round of revision took place in the spring of 1986~\cite{R3RS}.
- %, again accomplished
- %almost entirely by electronic mail, resulted in the present report.
- The present report reflects further revisions agreed upon in a meeting
- that preceded the 1988 ACM Conference on Lisp and Functional Programming
- and in subsequent electronic mail.
-
- %\vest The number 3 in the title is part of the title, not a reference to
- %a footnote. The word ``revised'' is raised to the third power because
- %the report is a revision of a report that was already twice revised.
-
- \todo{Write an editors' note?}
-
-
- \medskip
-
- We intend this report to belong to the entire Scheme community, and so
- we grant permission to copy it in whole or in part without fee. In
- particular, we encourage implementors of Scheme to use this report as
- a starting point for manuals and other documentation, modifying it as
- necessary.
-
-
-
-
- \subsection*{Acknowledgements}
-
- We would like to thank the following people for their help: Alan Bawden, Michael
- Blair, George Carrette, Andy Cromarty, Pavel Curtis, Jeff Dalton, Olivier Danvy,
- Ken Dickey, Andy Freeman, Richard Gabriel, Yekta G\"ursel, Ken Haase, Robert
- Hieb, Paul Hudak,
- Richard Kelsey, Morry Katz, Chris Lindblad, Mark Meyer, Jim Miller, Jim Philbin,
- John Ramsdell, Mike Shaff, Jonathan Shapiro, Julie Sussman,
- Perry Wagle, Daniel Weise, and Henry Wu. We thank Carol Fessenden, Daniel
- Friedman, and Christopher Haynes for permission to use text from the Scheme 311
- version 4 reference manual. We thank Texas Instruments, Inc.~for permission to
- use text from the {\em TI Scheme Language Reference Manual.} We gladly
- acknowledge the influence of manuals for MIT Scheme, T, Scheme 84,
- Common Lisp, and Algol 60.
-
- \vest We also thank Betty Dexter for the extreme effort she put into
- setting this report in \TeX, and Donald Knuth for designing the program
- that caused her troubles.
-
- \vest The Artificial Intelligence Laboratory of the
- Massachusetts Institute of Technology, the Computer Science
- Department of Indiana University, and the Computer and Information
- Sciences Department of the University of Oregon supported the
- preparation of this report. Support for the MIT work was provided in part by
- the Advanced Research Projects Agency of the Department of Defense under Office
- of Naval Research contract N00014-80-C-0505. Support for the Indiana
- University work was provided by NSF grants NCS 83-04567 and NCS
- 83-03325.
-
-
- \todo{Steele:
-
- [c] There should be a very clear message to the reader that Scheme certainly
- does owe debts to other sources, and one of them is Common Lisp. While
- Scheme certainly has been the pioneer in the treatment of closures and
- functional programming in a Lisp framework, I think it is fair to say that
- Common lisp pioneered a rational (forgive the pun) treatment of numeric data
- types in a Lisp framework, and my impression is that Scheme learned
- something in this area from the Common Lisp experience.
- }